package com.catazy.base.domain.result

/**
 * 作者: Tao
 * 日期: 2024/12/20
 * 时间: 14:28
 * 描述: 结果接口
 * Result 接口会有两个主要的实现：一个是表示成功的 Success 类，另一个是表示失败的 Error 类
 * sealed interface: 密封接口是一种特殊的接口，它的所有实现必须在其同一个文件中声明
 * out T: 使用协变泛型 out T 表示 Result 只会输出 T 类型的数据，不会修改它
 */
sealed interface Result<out T> {
    /**
     * 表示操作成功，并包含结果数据。
     */
    data class Success<out T>(val data: T) : Result<T>

    /**
     * 表示操作失败，并包含异常信息
     */
    data class Failure(val throwable: Throwable? = null) : Result<Nothing>
}